return X86EMUL_OKAY;
}
+static void realmode_load_fpu_ctxt(
+ struct x86_emulate_ctxt *ctxt)
+{
+ if ( !current->fpu_dirtied )
+ vmx_do_no_device_fault();
+}
+
static struct x86_emulate_ops realmode_emulator_ops = {
.read = realmode_emulate_read,
.insn_fetch = realmode_emulate_insn_fetch,
.cpuid = realmode_cpuid,
.hlt = realmode_hlt,
.inject_hw_exception = realmode_inject_hw_exception,
- .inject_sw_interrupt = realmode_inject_sw_interrupt
+ .inject_sw_interrupt = realmode_inject_sw_interrupt,
+ .load_fpu_ctxt = realmode_load_fpu_ctxt
};
void vmx_realmode(struct cpu_user_regs *regs)
vmx_inject_exception(TRAP_debug, HVM_DELIVER_NO_ERROR_CODE, 0);
}
-static void vmx_do_no_device_fault(void)
+void vmx_do_no_device_fault(void)
{
struct vcpu *v = current;
void vmx_do_resume(struct vcpu *);
void set_guest_time(struct vcpu *v, u64 gtime);
void vmx_vlapic_msr_changed(struct vcpu *v);
+void vmx_do_no_device_fault(void);
void vmx_cpuid_intercept(
unsigned int *eax, unsigned int *ebx,
unsigned int *ecx, unsigned int *edx);